package com.igeek.boot.entity;

import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Map;

/**
 * @package com.igeek.boot.entity
 * @Description User实体类
 * @Author LittlePunk [296526219@qq.ccom]
 * @Version 2022.1
 * @Date 2023/12/12 12:25
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
//用来标示表名的信息
@TableName("user")
@ApiModel("用户信息")
public class User {

    /**
     * @TableId 用来标示表中主键
     * 1.value属性：字段名称
     * 2.type属性：主键自增的策略
     *
     * 主键策略
     * 1.IdType.AUTO         自增长，表中主键字段必须设计为auto_increment
     * 2.IdType.ASSIGN_UUID  随机32位，包含数字、字母   63a70cf845129451cd61c41fa66d65eb
     * 3.IdType.ASSIGN_ID    默认的，雪花算法，包含数字 1734473735819780098
     * 4.IdType.INPUT        自己填写
     * 5.IdType.NONE         不填写
     */
    //@TableId用来标示表中主键的信息
    //当主键非自增长  使用雪花算法的生成策略IdType.ASSIGN_ID
    @TableId(value = "id",type = IdType.ASSIGN_ID)
    @ApiModelProperty("用户编号-Long类型")
    private Long id;

    //@TableField用来标示表中普通字段的信息
    @TableField("name")
    @ApiModelProperty("用户姓名")
    private String name;

    @TableField("age")
    @ApiModelProperty("用户年龄")
    private int age;

    @TableField("email")
    @ApiModelProperty("用户邮件")
    private String email;

    //逻辑删除  0未删除 1已删除
    //查询  select ... where is_deleted = 0
    //删除  update ... set is_deleted = 1 where is_deleted = 0
    @TableLogic
    @ApiModelProperty("校验用户是否删除")
    private int deleted;

    //自动填充  FieldFill.INSERT插入时自动填充   FieldFill.INSERT_UPDATE插入时及更新时自动填充
    @TableField(value = "create_time",fill = FieldFill.INSERT)
    @ApiModelProperty("数据创建时间")
    private LocalDateTime createTime;
    @TableField( value = "update_time", fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty("数据修改时间")
    private LocalDateTime updateTime;

    //乐观锁
    @Version
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty("乐观锁")
    private int version;

    //用作于表中不存在的字段，但是将来前端需要使用的数据
    @TableField(exist = false)
    @ApiModelProperty("前端需要的数据")
    private Map<String,Object> params;
}
